package xyz.fefine;

import java.util.List;
import java.util.Objects;

/**
 * Created by feng_ on 2016/9/16.
 * 数组引用
 */
public class ArrayRef extends Postfix {
    public ArrayRef(List<ASTree> list) {
        super(list);
    }

    public ASTree index() {
        return child(0);
    }

    /**
     * PrimartyExpr的递归会将数组传递进来
     * @param enviorment 运行环境
     * @param value 数组
     * @return 值
     */
    @Override
    public Object eval(Enviorment enviorment,Object value) {
        if (value instanceof Object[]) {
            Object index = index().eval(enviorment);
            if (index instanceof Integer) {
                return ((Object[]) value)[(Integer) index];
            }
        }
        throw new StoneException("bad error access", this);
    }

    /**
     * 当创建 a = Array[10]这样的数组,会调用此方法获取数组长度
     * @param enviorment
     * @return
     */
    @Override
    public Object eval(Enviorment enviorment) {
        return index().eval(enviorment);
    }

    @Override
    public String toString() {
        return "["+index()+"]";
    }
}
